package com.yc.project1_matrix.row;

import java.util.ArrayList;
import java.util.List;

/**
 * 并行二版 ：结果矩阵中的每一行一个任务
 */
public class ParallerRowMultiplier{
    public static void multiply(double[][] matrix1,double[][] matrix2,double[][]result){
        //将线程存储在集合里
        List<Thread> threads= new ArrayList<Thread>();
        //矩阵1的行列
        int rows1= matrix1.length;
        int column1=matrix1[0].length;
        //矩阵2的行列
        int rows2= matrix2.length;
        int column2=matrix2[0].length;

        //
        for (int i=0;i<rows1;i++) {
             //（矩阵1第一行对应元素乘以矩阵2第一列的对应元素）的和
                //创建线程 总共2000个
                Thread t =new Thread(new RowMultiplierTask(result,matrix1,matrix2,i));
                t.start();
                threads.add(t);
                //分批启动线程
                if (threads.size()%10==0) {
                    waitForThread(threads);
                }
        }
    }
    //如何知道电脑有多少核数  java.lang->Runtime.getRuntime()
    //有几个核就启动几个线程 -》负载
    private static void waitForThread(List<Thread> threads) {
        for (Thread t:threads) {
            try {
                t.join();//t先走，其他线程走
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}
